// Copyright (c) 2010, Sarah Brennan, Sales Support Engineering, Salesforce.com Inc.
// All rights reserved.

// Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
// Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 
// Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
// Neither the name of the salesforce.com nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. 
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
// INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 
// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 
// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, 
// EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

// Author: Sarah Brennan
// Date: 05-11-2010

// ----------------------------------------------------------------------------------------------------------------------------------
trigger adlTrigger on Outlet_Definition_Product_ADL__c (after insert) {
    
    Outlet_Definition_Product_ADL__c adl = Trigger.new.get(0);

   Id adlid;

   if(adl.Outlet_definition__c != null)
   {
       adlid = adl.Outlet_definition__c;
   }
   else 
   {
       adl.addError('You must associate an outlet definition');
   }


   Map<Id,Account> outletsMap;

   if(adlId != null)
   {


      outletsMap = new Map<Id,Account>([Select Id from Account Where Outlet_Definition__c =: adlId]);



        if(adl.Product__c != null)
       {
           if(!outletsMap.isEmpty())
           {
               for(Outlet_Stock__c existingStock : [SELECT Id, Account__c, Product__c FROM Outlet_Stock__c WHERE Product__c =: adl.Product__c AND Account__c IN: outletsMap.keySet()])
               {
                   if(outletsMap.containsKey(existingStock.Account__c))
                   {   

                       OutletsMap.remove(existingStock.Account__c);
                   }
                }
                if(!outletsMap.isEmpty())
                {


            List<Outlet_Stock__c> newOutletStock= new List<Outlet_Stock__c>(); 

                for(Id prodId : outletsMap.keySet())
                   {
                       Outlet_Stock__c stock = new Outlet_Stock__c();

                       stock.Account__c = adlId;
                       stock.Product__c = adl.Product__c;

                       newOutletStock.add(stock);
                   }   

                   if(!newOutletStock.isEmpty())
                   {
                       insert newOutletStock;
                   }           



                } 
            }
       }
   }
}